package com.tangyuan.oss.entity;

import lombok.Data;

/**
 * @作者: JS
 * @创建时间: 2023年12月22日 14:11
 * @描述: 通用返回值
 */
@Data
public class R<T> {
    
    private Boolean success;
    
    private Integer code;
    
    private String message;
    
    private T data;
    
    
    /**
     * 成功
     * @return {@link R<T>}
     * @Date: 2024/6/3 下午4:34
     */
    public static <T> R<T> ok() {
        return ok(null);
    }
    
    /**
     * 成功 - 返回数据
     * @param data 返回数据
     * @return {@link R<T>}
     * @Date: 2024/6/3 下午4:35
     */
    public static <T> R<T> ok(T data) {
        R<T> r = new R<T>();
        r.setSuccess(true);
        r.setCode(RCodeEnum.SUCCESS.getCode());
        r.setMessage(RCodeEnum.SUCCESS.getMessage());
        r.setData(data);
        return r;
    }
    
    
    /**
     * 失败
     * @return {@link R<T>}
     * @Date: 2024/6/3 下午4:36
     */
    public static <T> R<T> fail() {
        return fail(null);
    }
    
    /**
     * 失败 - 返回数据
     * @param data 返回数据
     * @return {@link R<T>}
     * @Date: 2024/6/3 下午4:37
     */
    public static <T> R<T> fail(T data) {
        R<T> r = new R<>();
        r.setSuccess(false);
        r.setCode(RCodeEnum.FAIL.getCode());
        r.setMessage(RCodeEnum.FAIL.getMessage());
        r.setData(data);
        return r;
    }
    
    /**
     * 失败 - 返回数据 + 返回信息
     * @param data    返回数据
     * @param message 返回信息
     * @return {@link R<T>}
     * @Date: 2024/6/3 下午4:37
     */
    public static <T> R<T> fail(T data, String message) {
        R<T> r = new R<>();
        r.setSuccess(false);
        r.setCode(RCodeEnum.FAIL.getCode());
        r.setMessage(message);
        r.setData(data);
        return r;
    }
    
    /**
     * 失败 - 带返回信息
     * @param message 返回信息
     * @return {@link R<T>}
     * @Date: 2024/6/3 下午4:37
     */
    public static <T> R<T> fail(String message) {
        R<T> r = new R<>();
        r.setSuccess(false);
        r.setCode(RCodeEnum.FAIL.getCode());
        r.setMessage(message);
        r.setData(null);
        return r;
    }
    
}
